package archer.framework.utils;

/**
 * Spring profile 常用方法与profile名称。
 *
 * @author christ
 */
public class ProfileUtils {

    //------------------------------------预定义profile类型----------------------------------------
    public static final String PRODUCTION = "production"; // 生产环境
    public static final String DEVELOPMENT = "development"; // 开发环境
    public static final String TEST = "test"; // 测试环境


    //------------------------------------spring profile切换----------------------------------------
    //war中使用
    public static final String ACTIVE_PROFILE = "spring.profiles.active";

    //spring profile 配置属性名，web.xml，pom.xml中配置名称必须和该属性一致
    public static final String CONFIG_PROFILE = "profiles.placeholder";

    /**
     * IDE本地Starter使用，设置profile的环境变量。
     */
    public static void setProfilePlaceHolder(String profile) {
        System.setProperty(CONFIG_PROFILE, profile);
    }

    /**
     * 当前系统运行环境是否为开发环境
     *
     * @return
     * @author christ
     * @date 2014年11月10日 上午10:48:50
     */
    public static boolean isDevelopmentProfile() {
        return DEVELOPMENT.equalsIgnoreCase(getCurrentProfile());
    }

    /**
     * 当前系统运行环境是否为生产环境
     *
     * @return
     * @author christ
     * @date 2014年11月10日 上午10:48:50
     */
    public static boolean isProductionProfile() {
        return PRODUCTION.equalsIgnoreCase(getCurrentProfile());
    }

    /**
     * 当前系统运行环境是否为测试环境
     *
     * @return
     */
    public static boolean isTestProfile() {
        return TEST.equalsIgnoreCase(getCurrentProfile());
    }

    /**
     * 获取不同profile使用的配置文件(properties文件)
     *
     * @param fileName
     * @return
     */
    public static String getPropertiesFileName(String fileName) {

        if (ValidateUtils.isEmpty(fileName) || isProductionProfile()) {
            return fileName;
        }

        if (!fileName.endsWith(".properties")) {
            return fileName;
        }

        return fileName.substring(0, fileName.lastIndexOf('.') + 1) + getCurrentProfile() + ".properties";
    }

    /**
     * 获得系统当前的运行环境
     *
     * @return
     * @author christ
     * @date 2014年11月10日 上午11:45:46
     */
    public static String getCurrentProfile() {

        //本地开发时读取，线上时必定为空
        String profile = System.getProperty(CONFIG_PROFILE);
        if (ValidateUtils.isNotEmpty(profile)) {
            return profile;
        }

        //线上时使用，属性在ProfileInitListener中设置
        return System.getProperty(ACTIVE_PROFILE);
    }
}